import javax.media.j3d.*;
import com.sun.j3d.utils.picking.*;
import com.sun.j3d.utils.picking.behaviors.*;
import com.sun.j3d.utils.geometry.*;

/**
* Ein einfaches Picking-Behaviour. Es werden unterschiedliche Transformationen
* gestartet, je nachdem welches Objekt angeklickt wurde.
*
* @author Frank Klawonn
* Letzte Aenderung 07.07.2005
* @see InteractionExample
*/
public class PickingExample extends PickMouseBehavior
{

  //Dieses Array enthaelt die unterschiedlichen Transformationen/Bewegungen,
  //die beim Anklicken initiiert werden sollen.
  public Alpha[] alphas;

  //Dieser Boolesche Wert wird benoetigt, um bei der Kugel zu ebtscheiden,
  //welche Transformation (Wachsen oder Schrumpfen) anzustossen ist.
  public boolean shrink;


  //Der Konstruktor
  public PickingExample(Canvas3D pCanvas, BranchGroup root, Bounds pBounds,
                        Alpha[] alphs)
  {
    super(pCanvas,root,pBounds);
    setSchedulingBounds(pBounds);
    alphas = alphs;
    shrink = true;
  }


  public void updateScene(int xpos, int ypos)
  {
    Primitive pickedShape = null;
    pickCanvas.setShapeLocation(xpos,ypos);
    PickResult pResult = pickCanvas.pickClosest();
    if (pResult != null)
    {
      pickedShape = (Primitive) pResult.getNode(PickResult.PRIMITIVE);
    }

    if (pickedShape != null)
    {
      if (pickedShape.getUserData()=="box")
      {
        //Der Wuerfel wurde ausgewaehlt. Daher muss die Startzeit
        //der Bewegung auf jetzt gesetzt werden.
        alphas[0].setStartTime(System.currentTimeMillis()-alphas[0].getTriggerTime());
      }
      else
      {
        if (pickedShape.getUserData()=="sphere")
        {
          //Die Kugel wurde ausgewaehlt. Es ist darauf zu achten, dass sie
          //abwechselnd schrumpft und waechst. Die Startzeit der entsprechenden
          //Bewegung muss auf jetzt gesetzt werden.
          if (shrink)
          {
            alphas[1].setStartTime(System.currentTimeMillis()-alphas[1].getTriggerTime());
            shrink = false; //Bei der naechsten Auswahl wachsen.
          }
          else
          {
            alphas[2].setStartTime(System.currentTimeMillis()-alphas[2].getTriggerTime());
            shrink = true; //Bei der naechsten Auswahl schrumpfen.
          }
        }
      }
    }

  }



}
